/**
 * @作者 钟诚
 * @日期 2011-7-25
 * @时间 下午02:14:31
 * @描述
 * @版本
 */
package my.utils;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.lang.time.FastDateFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @作者 钟诚
 * @日期 2011-7-25
 * @时间 下午02:14:31
 * @描述
 * @版本 v1.0
 */
public class DateUtil {
	private final static Log log = LogFactory.getLog(DateUtil.class);
	private static final String[] parsePatterns = { "yyyy年MM月dd日", "yyyy年MM月dd日 hh:mm:ss", "yyyy-MM-dd",
			"yyyy-MM-dd hh:mm:ss", "yyyyMMdd", "yyyyMMdd hh:mm:ss", "yy-M-d ah:mm","yyyyMMddhhmmss","yyyyMMddhhmmssS","hhmmss","hhmmssS" };

	/**
	 * yyyy年MM月dd日
	 */
	public static final int yyyyMMdd_ = 0;
	/**
	 * yyyy年MM月dd日 hh:mm:ss
	 */
	public static final int yyyyMMddhhmmss_ = 1;
	/**
	 * yyyy-MM-dd
	 */
	public static final int yyyy_MM_dd = 2;
	/**
	 * yyyy-MM-dd hh:mm:ss
	 */
	public static final int yyyy_MM_dd_hhmmss = 3;
	/**
	 * yyyyMMdd
	 */
	public static final int yyyyMMdd = 4;
	/**
	 * yyyyMMdd hh:mm:ss
	 */
	public static final int yyyyMMddhhmmss = 5;
	/**
	 * yy-M-d ah:mm
	 */
	public static final int yy_M_d_ahmm = 6;

	/**
	 * "yyyyMMddhhmmss"
	 */
	public static final int _yyyyMMddhhmmss = 7;
	/**
	 * "yyyyMMddhhmmssS"
	 */
	public static final int yyyyMMddhhmmssS = 8;
	/**
	 * "hhmmss"
	 */
	public static final int hhmmss = 9;
	/**
	 * "hhmmssS"
	 */
	public static final int hhmmssS = 10;
	/**
	 * 以友好的方式显示时间
	 * 
	 * @param req
	 * @param time
	 * @return
	 */
	public static String friendly_time(Date time) {
		if (time == null)
			return "0";
		int ct = (int) ((System.currentTimeMillis() - time.getTime()) / 1000);
		if (ct < 3600)
			return Math.max(ct / 60, 1) + "分钟前";
		if (ct >= 3600 && ct < 86400)
			return ct / 3600 + "小时前";
		if (ct >= 86400 && ct < 2592000) { // 86400 * 30
			int day = ct / 86400;
			return (day > 1) ? (day + "天前") : ("昨天");
		}
		if (ct >= 2592000 && ct < 31104000) // 86400 * 30
			return ct / 2592000 + "月前";
		return ct / 31104000 + "年前";
	}

	/**
	 * 
	 * @描述 当前友好时间
	 * @作者 钟诚
	 * @日期 2011-8-10
	 * @时间 上午10:32:09
	 * @return
	 */
	public static String friendly_time() {
		return friendly_time(new Date());
	}

	/**
	 * 
	 * @描述 返回当前日期,格式:2000年1月1日
	 * @作者 钟诚
	 * @日期 2011-8-10
	 * @时间 下午03:13:28
	 * @return
	 */
	public static String getFormatLongDate() {
		String dateStr = getFormatLongDate(new Date());
		return dateStr;
	}

	/**
	 * 
	 * @描述 返回时间格式为:2000年1月1日
	 * @作者 钟诚
	 * @日期 2011-8-10
	 * @时间 上午10:34:26
	 * @param date
	 * @return
	 */
	public static String getFormatLongDate(Date date) {
		if(date==null){
			return "";
		}
		String dateStr = FastDateFormat.getDateInstance(FastDateFormat.LONG).format(date);
		return dateStr;
	}

	/**
	 * 
	 * @描述 返回时间格式为:2000年1月1日 12:11:33
	 * @作者 钟诚
	 * @日期 2011-8-10
	 * @时间 下午03:14:00
	 * @param date
	 * @return
	 */
	public static String getFormatLongDatetime(Date date) {
		if(date==null){
			return "";
		}
		String dateStr = FastDateFormat.getDateTimeInstance(FastDateFormat.LONG, FastDateFormat.MEDIUM).format(date);
		return dateStr;
	}

	/**
	 * 
	 * @描述 返回当前时间格式为:2000年1月1日 12:11:33
	 * @作者 钟诚
	 * @日期 2011-8-10
	 * @时间 下午03:14:23
	 * @return
	 */
	public static String getFormatLongDatetime() {
		String dateStr = getFormatLongDatetime(new Date());
		return dateStr;
	}

	/**
	 * 
	 * @描述 字符串转换成Date对象
	 * @作者 钟诚
	 * @日期 Sep 13, 2011
	 * @时间 3:46:58 PM
	 * @param dateStr
	 *            字符串时间
	 * @return
	 */
	public static Date getDate(String dateStr) {
		try {
			return DateUtils.parseDate(dateStr, parsePatterns);
		} catch (ParseException e) {
			log.error("时间格式解析错误:", e);
		}
		return null;
	}

	/**
	 * 
	 * @描述 给定格式返回日期
	 * @作者 钟诚
	 * @日期 Sep 22, 2011
	 * @时间 11:22:42 PM
	 * @param pattern
	 * @return
	 */
	public static String getFormatDateString(int pattern) {
		return getFormatDateString(new Date(), pattern);
	}

	public static String getFormatDateString(Date date, int pattern) {
		if(date==null){
			return "";
		}
		return FastDateFormat.getInstance(parsePatterns[pattern]).format(date);
	}

	public static Date getDateDayAdd(int amount) {
		Calendar c = Calendar.getInstance();
		c.add(Calendar.DAY_OF_YEAR, amount);
		return c.getTime();
	}
}
